const express = require('express');
const multer = require('multer');
const path = require('path');
const XLSX = require('xlsx');
const fs = require('fs');
const app = express();
const PORT = 3000;
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
// 设置 multer 存储配置
const storage = multer.diskStorage({
  destination: (req, file, cb) => {
    cb(null, 'uploads/'); // 指定上传文件的存储路径
  },
  filename: (req, file, cb) => {

    console.log('file---', file);

    const originalFileName = decodeURIComponent(file.originalname); // 解码文件名
    // const safeFileName = originalFileName.replace(/[^a-zA-Z0-9._-]/g, '_'); // 替换特殊字符
    const safeFileName = decodeURIComponent(escape(file.originalname));
    console.log('safeFileName---', safeFileName);

    // const safeFileName = fileName.replace(/[^a-zA-Z0-9.]/g, '_'); // 替换特殊字符
    cb(null, safeFileName); // 直接使用原文件名
    // cb(null, Date.now() + path.extname(file.originalname)); // 以当前时间戳命名文件
  },
});

// 创建 multer 实例
const upload = multer({ storage: storage });

// 创建上传文件的路由
app.post('/upload', upload.single('file'), (req, res) => {
  if (req.file) {
    res.json({ code: 200, message: '文件上传成功', file: req.file });
  } else {
    // 上传失败
    res.status(400).json({ message: '文件上传失败' });
  }
});



// 定义模板格式
const templateKeys = [
  {
    key: 'name',
    str: '第一列是问题',
  },
  {
    key: 'age',
    str: '第二列是答案',
  },
];
app.post('/saveData', (req, res) => {
  try {
    console.log('req.body-----', req.body);
    const filePath = path.join(__dirname, req.body.path);
    console.log('filePath--', filePath);

    const workbook = XLSX.readFile(filePath);
    const sheetName = workbook.SheetNames[0]; // 读取第一个工作表
    const worksheet = workbook.Sheets[sheetName];

    // 解析 Excel 数据
    const jsonData = XLSX.utils.sheet_to_json(worksheet);
    const errors = [];
    console.log('jsonData--', jsonData);

    // 验证每一行数据
    jsonData.forEach((row, index) => {
      const rowErrors = [];
      let str = ''
      templateKeys.forEach(res => {
        if (!row[res.key]) {
          // rowErrors.push({

          //   row: `第 ${index + 1} 行`,
          //   message: `第 ${index + 1} 行缺少 "${res.key}" 字段`
          // });
          str += `${res.key};`
        }
      });
      rowErrors.push({

        row: `第 ${index + 1} 行`,
        message: `第 ${index + 1} 行缺少 "${str}" 字段`
      });

      if (rowErrors.length > 0) {
        errors.push(...rowErrors);
      }
    });

    // 根据错误返回响应
    if (errors.length > 0) {
      // return res.status(400).json({ code:400,message: '模板格式有问题', errors });
      res.json({ code: 400, message: '模板格式有问题', data: errors });
    }

    // 处理有效数据（如果没有错误）
    // 这里可以处理有效数据，例如存储到数据库
    res.json({ code: 200, message: '文件上传成功', data: jsonData });
  } catch (err) {
    console.log('err', err);

  }

})







// 启动服务
app.listen(PORT, () => {
  console.log(`服务器正在运行 http://localhost:${PORT}`);
});